﻿// -----------------------------------------------------------------------
// <copyright file="CoalizaoFormModel.cs" company="Storytelling">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------
namespace Storytelling.Modelos.VTR
{
    using System.ComponentModel.DataAnnotations;
    using Storytelling.Entidades.VTR;
    using Storytelling.Utils;
    using System.Linq;

    public class CoalizaoFormModel : InativoFormModel<Coalizao>
    {
        private string vantagem;
        private string[] coalizaoDisciplinaDisciplina;
        private string[] coalizaoVantagemVantagem;

        public override long? Id
        {
            get { return base.Id; }
            set { base.Id = value; }
        }

        [Required]
        [Display(Name = "Descrição")]
        [StringLength(1000, MinimumLength = 5)]
        public virtual string Descricao
        {
            get { return Entidade.Descricao; }
            set { Entidade.Descricao = value; }
        }

        public virtual string Vantagem
        {
            get
            {
                if (Entidade.Vantagem != null && !string.IsNullOrEmpty(Entidade.Vantagem.Nome))
                {
                    vantagem = Entidade.Vantagem.Nome;
                }
                else
                {
                    vantagem = "";
                }
                return vantagem;
            }
            set { vantagem = value; }
        }

        [Required]
        [Display(Name = "Vantagem Relacionada")]
        public virtual long VantagemValor
        {
            get { return Entidade.VantagemId; }
            set { Entidade.VantagemId = value; }
        }

        #region Disciplinas

        public virtual long[] CoalizaoDisciplinaId
        {
            get
            {
                return Entidade.Disciplinas != null ? Entidade.Disciplinas.Select(ent => ent.Id).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Coalizao, CoalizaoDisciplina, long>(value, ent => ent.Disciplinas, (valor, item) =>
                {
                    item.CoalizaoId = Entidade.Id;
                    item.Id = valor;
                });
            }
        }

        public virtual string[] CoalizaoDisciplinaDisciplina
        {
            get
            {
                Entidade.CarregarArray<Coalizao, CoalizaoDisciplina>(ref coalizaoDisciplinaDisciplina, ent => ent.Disciplinas, item => item.Disciplina);
                return coalizaoDisciplinaDisciplina;
            }
            set { coalizaoDisciplinaDisciplina = value; }
        }

        [ArrayRange(0, default(long))]
        [Display(Name = "Disciplina")]
        public virtual long[] CoalizaoDisciplinaDisciplinaValor
        {
            get
            {
                return Entidade.Disciplinas != null ? Entidade.Disciplinas.Select(ent => ent.DisciplinaId).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Coalizao, CoalizaoDisciplina, long>(value, ent => ent.Disciplinas, (valor, item) =>
                {
                    item.CoalizaoId = Entidade.Id;
                    item.DisciplinaId = valor;
                });
            }
        } 

        #endregion        
        
        #region Vantagens

        public virtual long[] CoalizaoVantagemId
        {
            get
            {
                return Entidade.Vantagens != null ? Entidade.Vantagens.Select(ent => ent.Id).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Coalizao, CoalizaoVantagem, long>(value, ent => ent.Vantagens, (valor, item) =>
                {
                    item.CoalizaoId = Entidade.Id;
                    item.Id = valor;
                });
            }
        }

        public virtual string[] CoalizaoVantagemVantagem
        {
            get
            {
                Entidade.CarregarArray<Coalizao, CoalizaoVantagem>(ref coalizaoVantagemVantagem, ent => ent.Vantagens, item => item.Vantagem);
                return coalizaoVantagemVantagem;
            }
            set { coalizaoVantagemVantagem = value; }
        }

        [ArrayRange(0, default(long))]
        [Display(Name = "Vantagem")]
        public virtual long[] CoalizaoVantagemVantagemValor
        {
            get
            {
                return Entidade.Vantagens != null ? Entidade.Vantagens.Select(ent => ent.VantagemId).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Coalizao, CoalizaoVantagem, long>(value, ent => ent.Vantagens, (valor, item) =>
                {
                    item.CoalizaoId = Entidade.Id;
                    item.VantagemId = valor;
                });
            }
        } 

        #endregion
    }
}
